# 读取输出字幕文本每行字幕，生成音频，集合在一个文件夹

import requests  # 导入 requests 模块以处理 HTTP 请求
import os  # 导入 os 模块以处理文件和目录

# 配置部分
INPUT_FILE = 'ch.txt'  # 输入文件路径
OUTPUT_FOLDER = 'output_wav_files'  # 输出文件夹

def getAudio(savename, url):  # 定义下载音频的函数
    response = requests.get(url)  # 发起 GET 请求获取音频文件
    if response.status_code == 200:  # 检查请求是否成功
        with open(savename, "wb") as file:  # 以二进制写模式打开文件
            file.write(response.content)  # 写入响应内容到文件
        print(f"音频文件 {savename} 已成功下载到本地。")  # 打印成功信息
        return True  # 返回成功状态
    else:
        print(f"下载失败，状态码: {response.status_code}")  # 打印失败信息
        return False  # 返回失败状态
    
def chattts(msg, audioname):  # 定义调用 TTS 服务的函数
    res = requests.post('http://192.168.88.251:9966/tts', data={  # 发起 POST 请求
        "text": msg,  # 要转换的文本
        "prompt": "",  # 提示文本（留空）
        "voice": "3333",  # 指定语音类型
        "temperature": 0.3,  # 控制生成音频的随机性
        "top_p": 0.7,  # 采样范围
        "top_k": 20,  # 采样数量
        "skip_refine": 0,  # 是否跳过精炼
        "custom_voice": 0,  # 是否使用自定义语音
        "is_split": 1  # 是否拆分音频
    })
    
    if res.status_code == 200:  # 检查请求是否成功
        print(res.json())  # 打印响应的 JSON 数据
        url = res.json().get('url')  # 获取音频文件的 URL
        if url:  # 如果 URL 存在
            getAudio(audioname, url)  # 下载音频文件
        else:
            print("未能获取音频文件的 URL。")  # 打印错误信息
    else:
        print(f"请求失败，状态码: {res.status_code}")  # 打印请求失败信息

def process_subtitles(file_path, output_dir):  # 定义处理字幕的函数
    os.makedirs(output_dir, exist_ok=True)  # 创建输出目录，如果不存在
    with open(file_path, 'r', encoding='utf-8') as file:  # 以 UTF-8 编码打开文件
        lines = file.readlines()  # 读取所有行
        
    for index, line in enumerate(lines):  # 遍历每行字幕
        line = line.strip()  # 去除行首尾空白字符
        if line:  # 确保行不为空
            audioname = f'{output_dir}/line_{index + 1}.wav'  # 生成音频文件名
            chattts(line, audioname)  # 调用 TTS 函数生成音频

# 主函数
if __name__ == "__main__":  # 如果是主程序
    process_subtitles(INPUT_FILE, OUTPUT_FOLDER)  # 处理字幕文件并生成音频
